﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIGERP_Entidades;
using System.Data;
using System.Data.SqlClient;

namespace SIGERP_Datos
{
    public class HndDerivacion
    {
        public static List<Derivacion> GetAllWhereReclamo(Reclamo r)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.derivacion WHERE id_reclamo="+r.id+" ORDER BY fecha ASC");
            var derivaciones = new List<Derivacion>();
            foreach (DataRow dtRow in tabla.Rows)
            {
                Derivacion d = new Derivacion(dtRow);
                d.reclamo=r;
                d.departamento=HndDepartamento.getOne(Convert.ToInt32(dtRow["id_departamento_destino"]));
                d.tipo=HndTipoDerivacion.getOne(Convert.ToInt32(dtRow["id_tipo_derivacion"]));
                d.usuario_deriva=HndUsuario.getOne(Convert.ToInt32(dtRow["id_usuario_deriva"]));
                if (dtRow["id_usuario_recibe"] != DBNull.Value) d.usuario_recepciona = HndUsuario.getOne(Convert.ToInt32(dtRow["id_usuario_recibe"]));
                derivaciones.Add(d);
            }
            return derivaciones;
        }

        public static void Insert(Derivacion d)
        {
            SqlCommand comando = new SqlCommand();

            comando.CommandText = "INSERT INTO dbo.derivacion (id_reclamo, id_departamento_destino, fecha, id_tipo_derivacion, descripcion, id_usuario_deriva) "+
            " VALUES (@id_reclamo,@id_departamento_destino, GETDATE(), @id_tipo_derivacion,  @descripcion, @id_usuario_deriva)";
            comando.Parameters.AddWithValue("@id_reclamo", d.reclamo.id);
            comando.Parameters.AddWithValue("@id_departamento_destino", d.departamento.id);
            comando.Parameters.AddWithValue("@id_tipo_derivacion", d.tipo.id);
            comando.Parameters.AddWithValue("@descripcion", d.descripcion);
            comando.Parameters.AddWithValue("@id_usuario_deriva", d.usuario_deriva.id);
            

            Conexion.ejecutaComando(comando);
        }

        public static Derivacion GetOneWhereReclamo(Reclamo r)
        {
            DataTable tabla = Conexion.ejecutaSelect("SELECT * FROM dbo.derivacion WHERE id_reclamo=" + r.id + " AND fecha_aceptacion IS NULL AND fecha_rechazo IS NULL");
            Derivacion d = new Derivacion();
            foreach (DataRow dtRow in tabla.Rows)
            {
                d = new Derivacion(dtRow);
                d.reclamo = r;
                d.departamento = HndDepartamento.getOne(Convert.ToInt32(dtRow["id_departamento_destino"]));
                d.tipo = HndTipoDerivacion.getOne(Convert.ToInt32(dtRow["id_tipo_derivacion"]));
                d.usuario_deriva = HndUsuario.getOne(Convert.ToInt32(dtRow["id_usuario_deriva"]));
                if(dtRow["id_usuario_recibe"]!=DBNull.Value)d.usuario_recepciona = HndUsuario.getOne(Convert.ToInt32(dtRow["id_usuario_recibe"]));
                d.fecha = (DateTime)dtRow["fecha"];
            }
            return d;
        }

        public static void RechazarDerivacion(Derivacion d)
        {

            SqlCommand comando = new SqlCommand();
            comando.CommandText = "UPDATE dbo.derivacion SET fecha_rechazo=GETDATE(), id_usuario_recibe=@id_usuario_recibe WHERE id_reclamo=@id_reclamo AND id_departamento_destino=@id_departamento_destino AND fecha=@fecha";

            comando.Parameters.AddWithValue("@id_usuario_recibe", d.usuario_recepciona.id);
            comando.Parameters.AddWithValue("@id_reclamo", d.reclamo.id);
            comando.Parameters.AddWithValue("@id_departamento_destino", d.departamento.id);
            comando.Parameters.AddWithValue("@fecha", d.fecha);

            Conexion.ejecutaComando(comando);
        }

        public static void AceptarDerivacion(Derivacion d)
        {

            SqlCommand comando = new SqlCommand();
            comando.CommandText = "UPDATE dbo.derivacion SET fecha_aceptacion=GETDATE(), id_usuario_recibe=@id_usuario_recibe WHERE id_reclamo=@id_reclamo AND id_departamento_destino=@id_departamento_destino AND fecha=@fecha";

            comando.Parameters.AddWithValue("@id_usuario_recibe", d.usuario_recepciona.id);
            comando.Parameters.AddWithValue("@id_reclamo", d.reclamo.id);
            comando.Parameters.AddWithValue("@id_departamento_destino", d.departamento.id);
            comando.Parameters.AddWithValue("@fecha", d.fecha);

            Conexion.ejecutaComando(comando);
        }

    }
}
